#!/usr/bin/env python
from misc.utility.scons_hints import *

Import("env")

thirdparty_obj = []
thirdparty_dir = "#thirdparty/vulkan"
thirdparty_volk_dir = "#thirdparty/volk"

# Use bundled Vulkan headers
env.Prepend(CPPPATH=[thirdparty_dir, thirdparty_dir + "/include"])

if env["use_volk"]:
    env.AppendUnique(CPPDEFINES=["USE_VOLK"])
    env.Prepend(CPPPATH=[thirdparty_volk_dir])

if env["platform"] == "android":
    env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_ANDROID_KHR"])
elif env["platform"] == "ios":
    env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_IOS_MVK", "VK_USE_PLATFORM_METAL_EXT"])
elif env["platform"] == "linuxbsd":
    if env["x11"]:
        env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_XLIB_KHR"])
    if env["wayland"]:
        env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_WAYLAND_KHR"])
elif env["platform"] == "macos":
    env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_MACOS_MVK", "VK_USE_PLATFORM_METAL_EXT"])
elif env["platform"] == "windows":
    env.AppendUnique(CPPDEFINES=["VK_USE_PLATFORM_WIN32_KHR"])

# Build Vulkan memory allocator and volk
env_thirdparty_vma = env.Clone()
env_thirdparty_vma.disable_warnings()
thirdparty_sources_vma = [thirdparty_dir + "/vk_mem_alloc.cpp"]

if env["use_volk"]:
    env_thirdparty_vma.AppendUnique(CPPDEFINES=[("VMA_STATIC_VULKAN_FUNCTIONS", 1)])
    env_thirdparty_volk = env.Clone()
    env_thirdparty_volk.disable_warnings()

    thirdparty_sources_volk = [thirdparty_volk_dir + "/volk.c"]
    env_thirdparty_volk.add_source_files(thirdparty_obj, thirdparty_sources_volk)
elif env["platform"] == "android":
    # Our current NDK version only provides old Vulkan headers,
    # so we have to limit VMA.
    env_thirdparty_vma.AppendUnique(CPPDEFINES=[("VMA_VULKAN_VERSION", 1000000)])
elif env["platform"] == "macos" or env["platform"] == "ios":
    # MoltenVK supports only Vulkan 1.1 API, limit VMA to the same version.
    env_thirdparty_vma.AppendUnique(CPPDEFINES=[("VMA_VULKAN_VERSION", 1001000)])

env_thirdparty_vma.add_source_files(thirdparty_obj, thirdparty_sources_vma)


env.drivers_sources += thirdparty_obj


# Godot source files

driver_obj = []

env.add_source_files(driver_obj, "*.cpp")
env.drivers_sources += driver_obj

# Needed to force rebuilding the driver files when the thirdparty code is updated.
env.Depends(driver_obj, thirdparty_obj)
